package web.beans;

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import ejb.dto.EscursioneDTO;
import ejb.dto.HotelDTO;
import ejb.dto.ProdottoBaseDTO;
import ejb.dto.VoloDTO;
import ejb.managerbeans.EscursioneManagerBeanLocal;
import ejb.managerbeans.HotelManagerBeanLocal;
import ejb.managerbeans.ProdottoManagerBeanLocal;
import ejb.managerbeans.VoloManagerBeanLocal;

@ManagedBean(name = "createBasicProductBean")
@RequestScoped
public class CreateBasicProductBean 
{
	@EJB
	private ProdottoManagerBeanLocal pmb;
	@EJB
	private VoloManagerBeanLocal vmb;
	@EJB
	private EscursioneManagerBeanLocal emb;
	@EJB
	private HotelManagerBeanLocal hmb;
	
	private ProdottoBaseDTO newPbDto;
	private VoloDTO newVoloDTO;
	private HotelDTO newHotelDTO;
	private EscursioneDTO newEscursioneDTO;
	
	@ManagedProperty( value = "#{sessionProductBean.id_prodotto}" )
	private int id_prodotto;
	@ManagedProperty( value = "#{sessionProductBean.tipo_prodotto}" )
	private String tipo_prodotto;
	
	private Date today = new Date();
	
	public CreateBasicProductBean() 
	{
		
	}
	@PostConstruct
	public void init()
	{
		setNewPbDto( new ProdottoBaseDTO() );
		setNewEscursioneDTO( new EscursioneDTO() );
    	setNewHotelDTO( new HotelDTO() );
    	setNewVoloDTO( new VoloDTO() );
        
    	if( id_prodotto != 0 )
    	{
    		newPbDto.setId(id_prodotto);
        	if( tipo_prodotto.equals( "escursione" ))
        	{
        		newEscursioneDTO = ( EscursioneDTO )pmb.dtoById( tipo_prodotto , id_prodotto );
        		newPbDto.setDataFine( newEscursioneDTO.getDataFine());
        		newPbDto.setDataInizio( newEscursioneDTO.getDataInizio());
        		newPbDto.setNposti( newEscursioneDTO.getNposti());
        		newPbDto.setPrezzo( newEscursioneDTO.getPrezzo() );
        	}
        	else if(tipo_prodotto.equals( "hotel" ))
        	{
        		newHotelDTO = ( HotelDTO )pmb.dtoById( tipo_prodotto , id_prodotto );
        		newPbDto.setDataFine( newHotelDTO.getDataFine());
        		newPbDto.setDataInizio( newHotelDTO.getDataInizio());
        		newPbDto.setNposti( newHotelDTO.getNposti());
        		newPbDto.setPrezzo( newHotelDTO.getPrezzo() );
        	}
        	else
        	{
        		newVoloDTO = ( VoloDTO )pmb.dtoById( tipo_prodotto , id_prodotto );
        		newPbDto.setDataFine( newVoloDTO.getDataFine());
        		newPbDto.setDataInizio( newVoloDTO.getDataInizio());
        		newPbDto.setNposti( newVoloDTO.getNposti());
        		newPbDto.setPrezzo( newVoloDTO.getPrezzo() );
        	}
        }
    }
	
	public ProdottoBaseDTO getNewPbDto() {
		return newPbDto;
	}

	public void setNewPbDto(ProdottoBaseDTO newPbDto) {
		this.newPbDto = newPbDto;
	}

	public VoloDTO getNewVoloDTO() {
		return newVoloDTO;
	}

	public void setNewVoloDTO(VoloDTO newVoloDTO) {
		this.newVoloDTO = newVoloDTO;
	}

	public HotelDTO getNewHotelDTO() {
		return newHotelDTO;
	}

	public void setNewHotelDTO(HotelDTO newHotelDTO) {
		this.newHotelDTO = newHotelDTO;
	}

	public EscursioneDTO getNewEscursioneDTO() {
		return newEscursioneDTO;
	}

	public void setNewEscursioneDTO(EscursioneDTO newEscursioneDTO) {
		this.newEscursioneDTO = newEscursioneDTO;
	}
	
	public String createProductEscursione()
	{
		if( id_prodotto == 0 )
			pmb.save( newPbDto , newEscursioneDTO );
		else
			pmb.update( newPbDto , newEscursioneDTO );
		return "index?faces-redirect=true";
	}
	
	public String createProductHotel()
	{
		if( id_prodotto == 0 )
			pmb.save( newPbDto , newHotelDTO );
		else
			pmb.update( newPbDto , newHotelDTO );
		return "index?faces-redirect=true";
	}
	
	public String createProductVolo()
	{
		if( id_prodotto == 0 )
			pmb.save( newPbDto , newVoloDTO );
		else
			pmb.update( newPbDto , newVoloDTO );
		return "index?faces-redirect=true";
	}
	
	public Date getToday() {
		return today;
	}

	public void setToday(Date today) {
		this.today = today;
	}

	public int getId_prodotto() {
		return id_prodotto;
	}

	public void setId_prodotto(int id_prodotto) {
		this.id_prodotto = id_prodotto;
	}

	public String getTipo_prodotto() {
		return tipo_prodotto;
	}

	public void setTipo_prodotto(String tipo_prodotto) {
		this.tipo_prodotto = tipo_prodotto;
	}
}
